package menu;

import oop.Game;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.JOptionPane;

/**
 *
 * @author TxGVNN
 */
public class Menu implements MouseListener {

    Game game;                      // Lớp game để tương tác với nó
    Resources res;                  // Tài nguyên

    int loop[] = {0, 550};          // Các loop vẽ menu

    public Menu(Game game) {
        this.game = game;
        res = new Resources();

    }

    public void paint(Graphics g) {

        switch (game.getFlag()) {
            case 0x00: // hiển thị menu chọn start và exit
                // Button Start and Exit

                g.setColor(Color.DARK_GRAY); // Đổ màu xám cho màn hình
                g.fillRect(0, 0, 900, 600);

                g.drawImage(res.titleGame, 100, 20, null);  // 
                g.setColor(Color.WHITE);

                res.buttonStart.paint(g);   // Vẽ start
                res.buttonAbout.paint(g);   // Vẽ about
                res.buttonExit.paint(g);    // Vẽ exit
                break;
            case 0x01: // show menu chọn màn (map)
                g.setFont(res.fontEffect);        // Cài Font cho vẽ text

                g.setColor(Color.DARK_GRAY); // Đổ màu xám cho màn hình
                g.fillRect(0, 0, 900, 600);

                g.drawImage(res.titleGame, 100, 20, null);  // 
                g.setColor(Color.WHITE);

                int x = 100;
                int y = 100;
                int map = 0;
                for (int i = 0; i < 2; i++) {
                    for (int j = 0; j < 3; j++) {
                        g.drawImage(res.mapChoose, x, y, null);

                        g.drawString("" + (++map), x + 100, y + 100);
                        x += 250;
                    }
                    x = 100;
                    y += 250;
                }
                break;
            case 0x03:
                // Player win

                g.drawImage(res.youWin, 250, loop[0], null);
                if (loop[0] <= 80) {
                    loop[0] += 8;
                } else {
                    res.buttonContinue.paint(g);
                }
                break;
            case 0x04:
                // Player lose

                g.drawImage(res.youLose, 250, loop[0], null);
                if (loop[0] < 80) {
                    loop[0] += 8;
                } else {
                    res.buttonBack.paint(g);
                }
                break;
            case 0x05:
                // About a game

                g.setColor(Color.DARK_GRAY); // Đổ màu xám cho màn hình
                g.fillRect(0, 0, 900, 600);
                g.drawImage(res.titleGame, 100, 20, null);  // Tiêu đề game

                g.drawImage(res.infoAbout, 50, loop[1], null);

                if (loop[1] > 80) {
                    loop[1] -= 5;
                } else {
                    res.buttonBackInfo.paint(g);
                }
                break;

        }

    }

    /**
     * Kiểm tra sự click chuột
     *
     * @param e
     */
    @Override
    public void mouseClicked(MouseEvent e) {
        switch (game.getFlag()) {
            case 0x00: // menu begin
                if (e.getX() > 300 && e.getX() < 550) {
                    if (e.getY() > 200 && e.getY() < 260) {
                        // Bấm start
                        oop.Player.setName(JOptionPane.showInputDialog(JOptionPane.getRootFrame(), "Tên người chơi:"));

                        game.setFlag(0x01);
                    }

                    if (e.getY() > 300 && e.getY() < 360) {
                        // Bấm about
                        game.setFlag(0x05);
                    }

                    if (e.getY() > 400 && e.getY() < 460) {
                        // Bấm exit
                        game.stop();
                    }
                }
                break;
            case 0x01: // menu chọn map
                if (e.getY() > 100 && e.getY() < 300) {
                    // chọn map 1
                    if (e.getX() > 100 && e.getX() < 300) {
                        game.init(1);
                        game.setFlag(0x02);

                        return;
                    }
                    if (e.getX() > 350 && e.getX() < 550) {
                        game.init(2);
                        game.setFlag(0x02);
                        return;
                    }

                    if (e.getX() > 600 && e.getX() < 800) {
                        game.init(3);
                        game.setFlag(0x02);
                        return;
                    }
                    return;
                }
                if (e.getY() > 350 && e.getY() < 550) {
                    if (e.getX() > 100 && e.getX() < 300) {
                        game.init(4);
                        game.setFlag(0x02);
                        return;

                    }
                    if (e.getX() > 350 && e.getX() < 550) {
                        game.init(5);
                        game.setFlag(0x02);
                        return;
                    }
                    if (e.getX() > 600 && e.getX() < 800) {
                        game.init(6);
                        game.setFlag(0x02);
                        return;
                    }

                }
                break;
            case 0x03:
                // Play win
                if (e.getY() > 210 && e.getY() < 310) {
                    if (e.getX() > 370 && e.getX() < 470) {
                        game.setFlag(0x01);
                        break;
                    }
                }
                break;
            case 0x04:
                // Player lose
                if (e.getY() > 210 && e.getY() < 310) {
                    if (e.getX() > 370 && e.getX() < 470) {
                        game.setFlag(0x00);

                    }
                }
                break;
            case 0x05:
                if (e.getY() > 390 && e.getY() < 490) {
                    if (e.getX() > 225 && e.getX() < 325) {
                        game.setFlag(0x00);
                        break;
                    }
                }
        }
    }

    @Override
    public void mousePressed(MouseEvent e) {
//        System.out.println("Pressed");
    }

    @Override
    public void mouseReleased(MouseEvent e
    ) {
//        System.out.println("Releaseed");
    }

    @Override
    public void mouseEntered(MouseEvent e
    ) {
//        System.out.println("Entered");
    }

    @Override
    public void mouseExited(MouseEvent e
    ) {
//        System.out.println("Exit");
    }

}
